package br.com.treinamento.gestaoExperienciaProfissional.validator;

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

import br.com.treinamento.gestaoExperienciaProfissional.model.Grupo;
import br.com.treinamento.gestaoExperienciaProfissional.service.GrupoService;
import br.com.treinamento.gestaoExperienciaProfissional.util.FacesUtil;

@FacesValidator("nomeGrupoValidator")
public class NomeGrupoValidator implements Validator {

	@Override
	public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
		if (verificarNomeGrupo(value.toString())) {
			gerarErro(value);
		}
	}

	private void gerarErro(Object value) {
		String mensagem = gerarMensagemErro(value.toString());
		FacesMessage msg = new FacesMessage(mensagem, mensagem);
		msg.setSeverity(FacesMessage.SEVERITY_ERROR);
		throw new ValidatorException(msg);
	}

	private boolean verificarNomeGrupo(String value) {
		GrupoService grupoService = new GrupoService();
		Grupo grupo = grupoService.buscarPorNome(value);
		return grupo != null && grupo.getNome().equals(value);
	}

	private String gerarMensagemErro(String value) {
		String mensagem = FacesUtil.getMessage("msg.nomeGrupoCadastrado");
		String mensagem2 = FacesUtil.getMessage("msg.grupo");
		return mensagem2 + " '" +  value + "' "  + mensagem;
	}
}
